home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / lib2to3 / fixes / fix_xrange.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  2.5 KB  |  54 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''Fixer that changes xrange(...) into range(...).'''
  5. from  import fixer_base
  6. from fixer_util import Name, Call, consuming_calls
  7. from  import patcomp
  8.  
  9. class FixXrange(fixer_base.BaseFix):
  10.     PATTERN = "\n              power<\n                 (name='range'|name='xrange') trailer< '(' args=any ')' >\n              rest=any* >\n              "
  11.     
  12.     def transform(self, node, results):
  13.         name = results['name']
  14.         if name.value == 'xrange':
  15.             return self.transform_xrange(node, results)
  16.         if name.value == 'range':
  17.             return self.transform_range(node, results)
  18.         raise ValueError(repr(name))
  19.  
  20.     
  21.     def transform_xrange(self, node, results):
  22.         name = results['name']
  23.         name.replace(Name('range', prefix = name.get_prefix()))
  24.  
  25.     
  26.     def transform_range(self, node, results):
  27.         if not self.in_special_context(node):
  28.             range_call = Call(Name('range'), [
  29.                 results['args'].clone()])
  30.             list_call = Call(Name('list'), [
  31.                 range_call], prefix = node.get_prefix())
  32.             for n in results['rest']:
  33.                 list_call.append_child(n)
  34.             
  35.             return list_call
  36.         return node
  37.  
  38.     P1 = "power< func=NAME trailer< '(' node=any ')' > any* >"
  39.     p1 = patcomp.compile_pattern(P1)
  40.     P2 = "for_stmt< 'for' any 'in' node=any ':' any* >\n            | comp_for< 'for' any 'in' node=any any* >\n            | comparison< any 'in' node=any any*>\n         "
  41.     p2 = patcomp.compile_pattern(P2)
  42.     
  43.     def in_special_context(self, node):
  44.         if node.parent is None:
  45.             return False
  46.         results = { }
  47.         if node.parent.parent is not None and self.p1.match(node.parent.parent, results) and results['node'] is node:
  48.             return results['func'].value in consuming_calls
  49.         if self.p2.match(node.parent, results):
  50.             pass
  51.         return results['node'] is node
  52.  
  53.  
  54.